<?php
// 编码声明
header("Content-Type:text/html;charset=utf-8");

//引入函数库
require_once("helpers.php");

//定义一个读取的路径
// __FILE__ 读取当前文件的绝对路径
// dirname 函数 返回路径中文件夹的结构部分
//判断是否有接收到get的参数
// isset() 判断是否有没有这个变量
//如果有就拿，如果没有就为空字符串
//全局变量
$path = isset($_GET['path']) ? trim($_GET['path']) : '';
$action = isset($_GET['action']) ? trim($_GET['action']) : '';


//empty 判断是否为空 为空返回true 否则false
//如果为空， 就默认读取 我们所给的默认目录
if(empty($path))
{
    $path = str_ireplace("\\", "/", dirname(__FILE__))."/demo";
}

//分类存放的两个变量
$dirs = $files = [];

//读取该路径下的文件结构，并返回一个数组结构
$list = scandir($path);

// var_dump($list);
// exit; //打断点

//循环遍历文件结构
foreach($list as $item)
{
    if($item == "." || $item == "..") continue;

    // 组装完整路径
    $cur = $path.'/'.$item;

    //打印调试一下
    // echo $cur."<br />";

    //判断是否是文件夹
    // var_dump(is_dir($cur));

    if(is_dir($cur)) //是文件夹
    {
        $dirs[] = [
            'name' => $item,
            'type' => '文件夹',
            'size' => filesize($cur),
            'ctime' => date("Y-m-d H:i", filectime($cur))
        ];
    }

    if(is_file($cur)) //是文件
    {
        $files[] = [
            'name' => $item,
            'type' => pathinfo($cur, PATHINFO_EXTENSION),
            'size' => filesize($cur),
            'ctime' => date("Y-m-d H:i", filectime($cur))
        ];
    }
}

//接收创建文件夹的参数
if($action == "AddDir")
{
    //接收新的文件夹名称
    $dirname = isset($_GET['dirname']) ? trim($_GET['dirname']) : '';

    //为空判断
    if(empty($dirname))
    {
        //提醒
        notice('文件夹名称不能为空');
        exit;
    }

    //组装完整的文件名称
    $dirname = $path.'/'.$dirname;

    //判断文件夹是否存在
    if(is_dir($dirname))
    {
        notice('文件夹已创建');
        exit;
    }
    
    //创建文件夹
    $res = @mkdir($dirname, 0777, true);

    if($res)
    {
        notice('文件夹创建成功', "index.php?path=$path");
        exit;
    }else
    {
        notice('文件夹创建失败');
        exit;
    }
}

//判断是否是重命名文件夹
if($action == "EditDir")
{
    //接收传递过来的参数
    $old = isset($_GET['old']) ? trim($_GET['old']) : '';
    $dirname = isset($_GET['dirname']) ? trim($_GET['dirname']) : '';

    //判断是否为空
    if(empty($old))
    {
        notice('旧的文件夹名称不能为空');
        exit;
    }

    if(empty($dirname))
    {
        notice('新的文件夹名称不能为空');
        exit;
    }

    if(!is_dir($old))
    {
        notice('旧的文件夹不存在');
        exit;
    }

    //判断新的文件夹名称是否已经存在了
    $dirname = $path.'/'.$dirname;
    if(is_dir($dirname))
    {
        notice('新文件夹已经存在了');
        exit;
    }

    //可以改动文件夹名称
    $res = rename($old, $dirname);

    if($res)
    {
        notice('重命名文件夹成功', "index.php?path=$path");
        exit;
    }else
    {
        notice('重命名文件夹失败');
        exit;
    }
}

//判断是否是删除文件夹
if($action == "DelDir")
{
    //接收参数
    $del = isset($_GET['del']) ? trim($_GET['del']) : '';

    //判断是否为空
    if(empty($del))
    {
        notice('删除的文件夹路径为空');
        exit;
    }

    //判断文件夹是否存在
    if(!is_dir($del))
    {
        notice('文件夹不存在');
        exit;
    }

    //即将删除文件夹 只能够删除为空的文件夹
    $res = @rmdir($del);

    if($res)
    {
        notice('删除文件夹成功', "index.php?path=$path");
        exit;
    }else
    {
        notice('删除文件夹失败');
        exit;
    }
}

//判断是否是强制删除文件夹
if($action == "DelAll")
{
    //接收删除的文件夹路径
    $dir = isset($_GET['dir']) ? trim($_GET['dir']) : "";

    //判断是否为空
    if(empty($dir))
    {
        notice('目录不能为空的');
        exit;
    }

    if(!is_dir($dir))
    {
        notice('目录不存在');
        exit;
    }

    // rmdir 删除文件夹
    if(DelDir($dir))
    {
        notice("删除文件夹成功", "index.php?path=$path");
        exit;
    }else
    {
        notice('删除文件夹失败');
        exit;
    }
}

//判断是否有文件上传
if($_FILES)
{
    // var_dump($_FILES);
    // exit;
    //判断如果有文件并且文件大小>0才说明有文件上传
    if(isset($_FILES['photo']) && $_FILES['photo']['size'] > 0)
    {
        $res = UploadFile('photo', $path);

        if($res['result'])
        {
            //刷新跳转
            notice($res['msg'], "index.php?path=$path");
            exit;
        }else
        {
            //失败提醒
            notice($res['msg']);
            exit;
        }

    }
}

if($_POST)
{
    //接收批量删除的数据
    $list = isset($_POST['list']) ? $_POST['list'] : [];

    var_dump($list);
    exit;
}

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FileSystem</title>
    <style>
        *{
            margin:0;
            padding:0;
        }

        table{
            width:80%;
            margin:5em auto 0em;
        }

        td,th{
            font-size:1.5em;
            height:45px;
            text-align: center;
            transition: all linear .3s;
        }

        th{
            font-weight: bold;
            font-size:1.7em;
        }

        td:hover, th:hover{
            background:yellow;
        }
    </style>
</head>
<body>
    <form method="post" enctype="multipart/form-data">
    <table border="1px" cellpadding="0" cellspacing="0">
        <tr>
            <th width="50px"><input type="checkbox" /></th>
            <th>文件名</th>
            <th>文件类型</th>
            <th>文件大小</th>
            <th>创建时间</th>
            <th>操作</th>
        </tr>
        
        <!-- 文件夹 -->
        <?php foreach($dirs as $item){?>
        <tr>
            <td><input type="checkbox" name="list[]" value="<?php echo $path.'/'.$item['name'];?>" /></td>
            <td><a href="index.php?path=<?php echo $path.'/'.$item['name'];?>"><?php echo $item['name'];?></a></td>
            <td><?php echo $item['type'];?></td>
            <td><?php echo $item['size'];?></td>
            <td><?php echo $item['ctime'];?></td>
            <td>
                <a href="javascript:void(0)" data-old="<?php echo $path.'/'.$item['name'];?>" onclick="EditDir(this)">重命名</a>
                <a href="javascript:void(0)" data-del="<?php echo $path.'/'.$item['name'];?>" onclick="DelDir(this)">删除</a>
                <a href="javascript:void(0)" data-dir="<?php echo $path.'/'.$item['name'];?>" onclick="DelAll(this)">强制删除</a>
            </td>
        </tr>
        <?php } ?>

        <!-- 文件 -->
        <?php foreach($files as $item){?>
        <tr>
            <td><input type="checkbox" name="list[]" value="<?php echo $path.'/'.$item['name'];?>" /></td>
            <td><?php echo $item['name'];?></td>
            <td><?php echo $item['type'];?></td>
            <td><?php echo $item['size'];?></td>
            <td><?php echo $item['ctime'];?></td>
            <td>
                <a href="#">编辑</a>
                <a href="#">重命名</a>
                <a href="#">删除</a>
            </td>
        </tr>
        <?php }?>

        <tr>
            <td colspan="6">
                <a href="javascript:history.go(-1)">后退</a>
                <a href="javascript:history.go(1)">前进</a>
                <a href="index.php">首页</a>
                <a href="javascript:void(0)" onclick="AddDir()">创建文件夹</a>
                <a href="#">创建文件</a>
                
                <input type="file" name="photo" />
                <!-- <input type="file" name="photo[]" multiple /> -->
                <button type="submit">上传</button>
                <button type="submit" onclick="FileDelAll()">批量删除</button>
            </td>
        </tr>
    </table>
    </form>
</body>
</html>

<script>
    //定义一个全局变量，用来记录所在路径
    var path = `<?php echo $path;?>`

    //创建文件夹
    function AddDir()
    {
        //弹出一个输入对话框
        var dirname = prompt('输入新的文件夹名称');

        // action(自定义的参数) 的作用 为了能够区分开多个提交动作
        //跳转界面
        if(dirname) location.href = `index.php?action=AddDir&path=${path}&dirname=${dirname}`
    }

    //重命名
    function EditDir(self)
    {
        //旧的文件夹名称
        var old = self.dataset.old

        //输入新的文件夹名称
        var dirname = prompt('请输入新的文件夹名称')

        //如果新的名称不为空 就跳转页面(刷新+传参)
        if(dirname) location.href = `index.php?action=EditDir&path=${path}&old=${old}&dirname=${dirname}`
    }

    //单个删除
    function DelDir(self)
    {
        //删除自定义属性
        var del = self.dataset.del
        
        //删除提醒  confirm 确认对话框 如果确认就返回true 否则返回false
        if(confirm("是否确认删除文件夹")) location.href = `index.php?action=DelDir&path=${path}&del=${del}`
    }

    //全部删除
    function DelAll(self)
    {
        //获取到要删除的文件夹路径
        var dir = self.dataset.dir
        
        if(confirm('是否确认删除')) location.href = `index.php?action=DelAll&path=${path}&dir=${dir}`
    }

    //批量删除提交
    function FileDelAll()
    {
        if(confirm("是否批量删除"))
        {
            return true;
        }else
        {
            return false;
        }
    }
</script>